//
//  WBBaseViewController.swift
//  SinaWebo
//
//  Created by 亚杏 on 2017/5/5.
//  Copyright © 2017年 oms. All rights reserved.
//

import UIKit

//oc中不支持多继承，在swift中使用协议替代
//所有主控制器的基本控制器
class WBBaseViewController: UIViewController{

    //用户登录标记
//    var userLogin = WBNetworkManager.shared.userLogin

    //自定义导航条
    lazy var navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.cz_screenWidth(), height: 64))

    lazy var navItem = UINavigationItem()

    //表格视图，如果未登录，就不创建
    var tableView: UITableView?
    //刷新控件
    var refreshControl: XYXRefreshControl?
    //上拉刷新 标记
    var isPullup = false
    //访客视图信息字典 
    var visitorInfoDict:[String: String]?


    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()
        WBNetworkManager.shared.userLogin ? loadData() : ()


    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        WBNetworkManager.shared.userLogin ? setupTableView() : setupVisiteView()
    }

    //加载数据，准备空的，用于子类调用
    func loadData() {

        //如果子类未实现任何方法时，默认关闭刷新 
        refreshControl?.endRefreshing()
    }

    //MARK:设置界面
    private func setupUI() {
        view.backgroundColor = UIColor.white

        settingNavBar()

        //取消自动缩进,如果隐藏了导航栏，会缩进20点
        automaticallyAdjustsScrollViewInsets = false
    }

    //MARK:设置导航条
    private func settingNavBar(){
        view.addSubview(navigationBar)
        navigationBar.items = [navItem]
        //设置navBar的背景颜色
        navigationBar.barTintColor = UIColor.cz_color(withHex: 0xF6F6F6)
        //设置title的字体颜色
        navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.darkGray]
        //设置系统按钮的文字颜色
        navigationBar.tintColor = UIColor.orange
    }


    //重写navBar的title
    override var title: String?{
        didSet {
            navItem.title = title
        }
    }

    //MARK: 设置访客视图
    private func setupVisiteView(){

        let visitorView = WBVisitorView(frame: view.bounds)
        visitorView.visitorInfo = visitorInfoDict
        view.insertSubview(visitorView, belowSubview: navigationBar)
        //添加访客视图按钮的监听方法
        visitorView.loginBtn.addTarget(self, action: #selector(login), for: .touchUpInside)
        visitorView.registerBtn.addTarget(self, action: #selector(registor), for: .touchUpInside)

        //设置导航条按钮
        navItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(registor))
        navItem.rightBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(login))

    }

    //MARK:访客视图监听方法
    @objc private func login(){
        print("用户登录")
        //发送通知
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: WBUserShouldLoginNotification), object: nil)
    }

    @objc private func registor(){
        print("用户注册")
    }


    //MARK:设置表格-用户登录之后执行，让子类重写此方法
    func setupTableView(){
        tableView = UITableView(frame: view.bounds, style: .plain)
        view.insertSubview(tableView!, belowSubview: navigationBar)

        //设置数据源和代理
        tableView?.dataSource = self
        tableView?.delegate = self

        //设置内容缩进
        tableView?.contentInset = UIEdgeInsetsMake(navigationBar.bounds.height, 0, tabBarController?.tabBar.bounds.height ?? 49, 0)

        //设置刷新控件
        refreshControl = XYXRefreshControl()
        tableView?.addSubview(refreshControl!)

        //添加监听方法
        refreshControl?.addTarget(self, action: #selector(loadData), for: .valueChanged)
        
    }
}

///1.extension 中不能有属性   2、不能重写父类方法
//MARK : UITableViewDelegate,UITableViewDataSource
extension WBBaseViewController:UITableViewDelegate,UITableViewDataSource {

    //子类的数据源方法不需要super,实现这些方法只是保证无语法错误
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }

    //在显示最后一行时，上拉刷新
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //1.判断indexpath是否是最后一行
        let row = indexPath.row
        let section = tableView.numberOfSections - 1

        if row<0 || section<0 {
            return
        }

        //2.最后一组的总共行数
        let count = tableView.numberOfRows(inSection: section)
        //如果是最后一行，同时没有开始上拉刷新
        if row == (count - 1) && !isPullup{
            print("上拉刷新")
            isPullup = true
            //开始刷新 
            loadData()

        }
    }

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 10
    }


}


